package com.nerve.android.cloudoffice.domain.db;

import java.util.Date;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * @项目名称 :tankMMS
 * @文件名称 :DBManager.java
 * @所在包 :com.tankmms.storage
 * @功能描述 :
 *	数据库的管理类，这里使用一个内部 SQLiteOpenHelper 来操作的
 * @创建者 :集成显卡	1053214511@qq.com
 * @创建日期 :2012-8-16 上午11:01:42
 * @修改记录 :
 */
public class DBManager {
	public static final String DB_NAME = "_BUS_966800.db";//数据库名
	public static final int DB_VERSION = 1;//数据库版本
	
	private DBHelper dbHelper = null;//DBHelper内部类的引用
	
	/*
	 * 这个才是真正操作数据库的对象
	 * 使用的是单例模式
	 */
	private static SQLiteDatabase database = null;
	
	public Context context = null;
	
	public DBManager(Context c){
		this.context = c;
	}
	
	/**
	 * @方法名称 :getDB
	 * @功能描述 :获取SQLiteDataBase对象
	 * @返回值类型 :SQLiteDatabase
	 *
	 * @创建日期 :2012-8-16
	 * @修改记录 :
	 */
	public SQLiteDatabase getDB(){
		if(database == null){
			dbHelper = new DBHelper(context, DB_NAME, null, DB_VERSION);
			database = dbHelper.getReadableDatabase();
		}
		
		return database;
	}
	
	
	private class DBHelper extends SQLiteOpenHelper{
		
		/**
		 * @构造方法:
		 * @类名:DBManager.java
		 * @param context  上下文
		 * @param name	数据库名
		 * @param factory 这个一般可以为null
		 * @param version 版本
		 */
		public DBHelper(Context context, String name, CursorFactory factory,
				int version) {
			super(context, name, factory, version);
		}

		/**
		 * SQLiteOpenHelper 中getWritableDatabase() 时，如果没有找到相应的数据库
		 * 就会调用这个 oncreate 方法，
		 * 所以这个是 数据库 刚刚创建时会调用的，也就是创建数据库就在这里执行
		 */
		@Override
		public void onCreate(SQLiteDatabase db) {
			Log.i("BUS", "现在创建数据库-------" + new Date()+ "context:"+context);
			
			db.execSQL(new MessageDao(context).getCreateSQL());
			
			Log.i("BUS", "insert data success!");
		}
		
		/**
		 * 当数据库需要更新时，会调用这个方法
		 */
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			String tableNames[] = {"MESSAGE_"};
			for (String n : tableNames) {
				db.execSQL("drop table if exists " + n);
			}
			onCreate(db);
		}
	}
}